將指定的位數轉換成'kuti', 'lakh', 'hajar', 'shata'
#include <iostream>
#include <string>
using namespace std;
int main(){
long long int n;
string s[5]={"kuti","lakh","hajar","shata",""};
int ran[5]={10000000,100000,1000,100,1};
int count=1;
while(cin>>n){
printf(" %3d. ",count);
count++;
long long int tmp[2]={0},tmp2[2]={0};
tmp[0]=n/ran[0];
tmp[1]=n%ran[0];
tmp2[0]=tmp[0];
tmp2[1]=tmp[1];
for(int i=0;i<5;i++){
if(tmp[0]/ran[i]!=0){
if(i<4)cout<<tmp[0]/ran[i]<<" "<<s[i];
else cout<<tmp[0]/ran[i];
tmp[0]%=ran[i];
if(tmp[0]!=0)cout<<" ";
}
}
if(tmp2[0]!=0&&tmp2[1]!=0)cout<<" "<<s[0]<<" ";
else if(tmp2[0]!=0&&tmp2[1]==0)cout<<" "<<s[0];
for(int i=0;i<5;i++){
if(tmp[1]/ran[i]!=0){
if(i<4)cout<<tmp[1]/ran[i]<<" "<<s[i];
else cout<<tmp[1]/ran[i];
tmp[1]%=ran[i];
if(tmp[1]!=0)cout<<" ";
}
}
if(n==0)cout<<0;
cout<<endl;
}
}
給兩個names,要計算出值,A-Z各對應1-26(大小寫不分),可以輸入除了英文字母的其他字符,但其他字符就不用計算。
算法是這樣例如‘bcz’, b = 2, c = 3 and z = 26所以值為(2+3+26) = 31 = (3+1) = 4,最後要計算兩個name的百分比
注意不能超過100%
這題有參考網路上其他大神的解題,謝謝大大
#include<bits/stdc++.h>
using namespace std;
int cal(int n) {
int sum=0;
while(n) {
sum+=n%10;
n/=10;
}
if(sum>=10)cal(sum);//因為題目要求最後要只剩1 digit
else return sum;
}
int main() {
char a[26], b[26];
while(scanf("%s", a)!=EOF) {
int p1=0,p2=0,sum1=0,sum2=0;
scanf("%s", b);
for(int i=0; i<strlen(a); i++) {
if(toupper(a[i])-64 >=1 && toupper(a[i])-64<=26){//由於輸入的name會有大小寫,且大小寫對於這題來說是相同的值
//所以我們統一用大寫來算
//可以輸入其他非英文字母的符號,但符號不計算值,所以這邊要判斷是否是英文字母A-Z
p1+= toupper(a[i])-64;
}
}
sum1 = cal(p1);
for(int i=0; i<strlen(b); i++) {
if(toupper(b[i])-64 >=1 && toupper(b[i])-64<=26){
p2+= toupper(b[i])-64;
}
}
sum2 = cal(p2);
if(sum1>sum2) printf("%.2f %%\n", (double)sum2/sum1*100);
else printf("%.2f %%\n", (double)sum1/sum2*100);
}
}